#ifndef xpack_macro_xforward_constructor
#define xpack_macro_xforward_constructor
#pragma push_macro("xuser")
#undef  xuser
#define xuser mixc::macro_xforward_constructor::inc
#include"meta/has_constructor.hpp"
#pragma pop_macro("xuser")

#define xforward_constructor(NAME,BASE)                             \
    template<class __xforward_self_t = BASE>                        \
    requires(                                                       \
        ::mixc::macro_xforward_constructor::inc                     \
        ::has_constructor<BASE, void(BASE &&)>                      \
    )                                                               \
    constexpr NAME(BASE && self):                                   \
        BASE((BASE &&)self){} /* 考虑不支持右值转发的情况 */        \
                                                                    \
    template<class __xforward_self_t = BASE>                        \
    requires(                                                       \
        ::mixc::macro_xforward_constructor::inc                     \
        ::has_constructor<BASE, void(BASE &)>                       \
    )                                                               \
    constexpr NAME(BASE & self):                                    \
        BASE(self){} /* 考虑不支持左值构造的情况 */
#endif
